最近项目上线,暂时稍微闲一点,来回顾下java的一些基础。回想下,也是大二上学的java,已经过去两年了,老师教的基本都是那些最基础的,如数据类型、运算符之类的,加上自己又没有好好学,基本算没学,也就后来转向android 的时候,用啥学啥,如集合、多线程和网络通信等等。下面整理下java面向对象的三大特性。
一、封装
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
一般是把属性私有,对其的访问只提供getter
和 setter
方法。
二、继承
继承可以理解为一个对象从另一个对象获取方法和属性的过程。常用的两个关键字为:extends
和 implements
,他们决定了一个对象和另一个对象间是否是IS-A(是一个)的关系。
在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类。
注:java的类均是由 java.lang.Object
类继承而来的,上面说的一个父类并不包含Object,它并不需要显示的声明。
extends关键字是用于 类直接的继承而 implements是针对接口的。
类只能是单继承的,但是接口可以同时实现多个,也可以同时使用。如:
public class A extends B implements C,D {
}
注:在Java中,类的多重继承是不合法,但接口允许多重继承。
三、多态
多态:同一个行为具有多个不同表现形式或形态的能力。它的必要条件:继承、重写、父类引用指向子类对象。
多态性具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
四、重写(Override)与重载(Overload)
重写 :是子类对父类的允许访问的方法的实现过程进行重新编写。返回值和形参都不能改变。他的好处在于子类可以根据需要,定义特定于自己的行为。
方法的重写规则
- 参数列表必须完全与被重写方法的相同;
- 返回类型必须完全与被重写方法的返回类型相同;
- 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
- 父类的成员方法只能被它的子类重写。
- 声明为final的方法不能被重写。
- 声明为static的方法不能被重写,但是能够被再次声明。
- 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
- 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
- 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
- 构造方法不能被重写。
- 如果不能继承一个方法,则不能重写这个方法。
Super:当需要在子类中调用父类的被重写方法时,要使用super关键字。
重载:是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
重载的重写规则
- 被重载的方法必须改变参数列表;
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
重写与重载之间的区别
| 区别点 | 方法重载 | 方法重写 |
| ——– | :—–: | :—-: |
| 参数列表 | 必须修改 | 不能修改 |
| 返回类型 | 可以修改 | 不能修改 |
| 异常 | 可以修改 | 可减少或删除,不能抛出新的或者更广的异常 |
| 访问 | 可以修改|可以降低访问限制|
五、接口(interface)
接口:是抽象方法的集合。它并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在Java中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
接口的特性:
- 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
- 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键子。
- 接口中的方法都是公有的。
一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键,与类不同的是他可以多重继承其他接口
public interface A extends InterfaceB,InterfaceC{
}
标记接口:没有任何方法和属性。起作用如下:
- 建立一个公共的父接口;
- 向一个类添加数据类型。